package com.mapper;

import com.entity.Product;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @InterfaceName ProductMapper
 * @Description 商品持久层接口
 * @Author Kx
 * @Date 2025/5/20 19:29
 * @Version 1.0
 */
public interface ProductMapper {
    /**
     * @author: kx
     * @date: 2025/5/20 19:40
     * @return java.util.List<com.entity.Product>
     * @description: 查询所有商品信息
     */
    List<Product> findAll();

    /**
     * @author: kx
     * @date: 2025/5/21 9:45
     * @param page : 当前页
     * @param size : 每页显示数
     * @return java.util.List<com.entity.Product>
     * @description: 分页查询所有商品信息
     */
    List<Product> findProductsByPage(@Param("pageNum") int page, @Param("pageSize") int size);

    /**
     * @author: kx
     * @date: 2025/6/4 20:09
     * @param title : 商品名称
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品名称模糊查询商品信息
     */
    List<Product> searchProductsByTitle(@Param("title") String title);

    /**
     * @author: kx
     * @date: 2025/6/4 20:33
     * @param title : 商品名称
     * @param pageNum : 当前页
     * @param pageSize : 每页显示数
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品名称模糊分页查询商品信息
     */
    List<Product> searchProductsByTitleWithPagination(@Param("title") String title,  @Param("pageNum") int pageNum, @Param("pageSize") int pageSize);

    /**
     * @author: kx
     * @date: 2025/5/27 11:03
     * @param productId : 商品编号
     * @return com.entity.Product
     * @description: 根据商品编号查询商品信息
     */
    Product findById(@Param("productId") Integer productId);

    /**
     * @author: kx
     * @date: 2025/5/21 10:47
     * @param product : 商品信息
     * @description: 添加商品信息
     */
    void addProduct(Product product);

    /**
     * @author: kx
     * @date: 2025/5/21 19:24
     * @param product : 商品信息
     * @description: 修改商品信息
     */
    void updateProduct(Product product);

    /**
     * @author: kx
     * @date: 2025/5/30 10:02
     * @param productId : 商品编号
     * @param number : 商品数量
     * @description: 修改商品的库存数量
     */
    void updateProductNumber(@Param("productId") Integer productId, @Param("number") Integer number);

    /**
     * @author: kx
     * @date: 2025/6/7 20:29
     * @param productId : 商品编号
     * @return com.entity.Product
     * @description: 查询商品所在分类中销量最高的商品
     */
    Product findTopRelatedProductBySales(@Param("productId") Integer productId);

    /**
     * @author: kx
     * @date: 2025/6/8 9:18
     * @param brand : 商品品牌
     * @param categoryId : 商品分类ID
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品品牌查询该品牌下所有商品信息(按销量排序)
     */
    List<Product> findHotProductsByBrand(@Param("brand") String brand, @Param("categoryId") Integer categoryId);

    /**
     * @author: kx
     * @date: 2025/6/15 20:37
     * @param categoryId : 商品分类ID
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品分类ID查询该分类下的所有商品信息
     */
    List<Product> getGoodsByCategoryId(@Param("categoryId") Integer categoryId);

    /**
     * 根据销量获取热门商品
     * @param limit 获取的热门商品数量
     * @return  热门商品列表
     */
    List<Product> findHotProduct(@Param("limit") int limit);

     /** @author: kx
     * @date: 2025/6/18 10:57
     * @param productId : 商品编号
     * @return com.entity.Product
     * @description: 根据商品编号查询商品信息
    */
    Product findByProductId(@Param("productId") Integer productId);

}
